package Offer;

/**
 * @author lakersUp
 * @Classname       Offer60dicesProbability
 * @Description     n个筛子的点数
 *      定义为二位数组的原因: 初始化问题, n个筛子的最小数就是n.所以必须根据传入的n动态初始化dp数组
 *          状态定义中几个未知数就是几维数组
 * @Date 2022/2/28 10:51
 * @Version 1.0
 */
public class Offer60dicesProbability {
    public double[] dicesProbability(int n) {
        int[][] dp=new int[n+1][6*n+1];
        //初始化
        for(int i=1;i<=6;i++){
            dp[1][i]=1;
        }
        for(int i=2;i<=n;i++){
            for(int j=i;j<=6*i;j++){
                for(int k=1;k<=6 && j>=k;k++){
                    dp[i][j]+=dp[i-1][j-k];
                }
            }
        }
        double[] res=new double[6*n-n+1];
        for(int i=n;i<=6*n;i++){
            res[i-n]=dp[n][i]*1.0/Math.pow(6,n);
        }
        return res;
    }
}
